gdk: Make GdkWindow cope better with its surface outliving the window
authorBenjamin Otte <otte@redhat.com>
Thu, 9 Sep 2010 00:13:33 +0000 (02:13 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 26 Sep 2010 13:11:41 +0000 (15:11 +0200)
Make extra sure we release the surface properly. Also make sure that the
released surface doesn't keep any references to us.

gdk/gdkwindow.c

index 40252bef5b6ba1c9077bc721967afd16739c8f1a..524a5d977bf82f20f3b8b57b33c490bf2221c92e 100644 (file)
@@ -523,6 +523,8 @@ gdk_window_finalize (GObject *object)
        _gdk_window_destroy (window, TRUE);
     }
 
+  gdk_window_drop_cairo_surface (obj);
+
   if (obj->impl)
     {
       g_object_unref (obj->impl);
@@ -1027,8 +1029,7 @@ recompute_visible_regions_internal (GdkWindowObject *private,
                                                private->width,
                                                private->height)))
     {
-      cairo_surface_destroy (private->cairo_surface);
-      private->cairo_surface = NULL;
+      gdk_window_drop_cairo_surface (private);
     }
 }
 
@@ -3664,6 +3665,7 @@ gdk_window_drop_cairo_surface (GdkWindowObject *private)
       cairo_surface_finish (private->cairo_surface);
       cairo_surface_set_user_data (private->cairo_surface, &gdk_window_cairo_key,
                                   NULL, NULL);
+      private->cairo_surface = NULL;
     }
 }